特定のページだけBottom Tabを非表示にする
何がしたいか
BottomTabとStackを使ってページを構成する
ある特定のページでは、BottomTabを非表示にしたい
BottomTabの直下が、その「特定のページ」なら簡単
code:ts
<BottomTab.Navigator screenOptions={({ route }) => hiddenTabBar(route)}>
<BottomTab.Screen
options={{ tabBarStyle: {display: 'none'} }} // コレを書けばいい
component={Component}
/>
</BottomTab.Navigator>
問題は、BottomTab > Stack > Screenのような構成になっている時にどうするか
上の書き方をすると、Stack全体でbottom tabが非表示なってしまう
どうするか
こんな構成になっているとする
BottomTab
HogeStack
A
B (bottom tabを非表示にしたい)
C (bottom tabを非表示にしたい)
こうする
code:ts
<BottomTab.Navigator screenOptions={({ route }) => hiddenTabBar(route)}>
<BottomTab.Screen
component={HogeStack}
/>
</BottomTab.Navigator>
code:ts
const pageNameTabBarHidden = 'B','C' as const; const hiddenTabBar = (route: RouteProp<ParamListBase, string>) => {
const title = getFocusedRouteNameFromRoute(route);
if (pageNameTabBarHidden.some(s => s === title)) {
return {
tabBarStyle: { display: 'none' }
} as const;
}
return {} as const;
};
ポイント
screenOptionsに関数を渡す
その中で条件分岐させる
tabBarStyle: { display: 'none' }を指定すれば非表示なる
as constを付けないと型エラーになる